﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.slgrg
    二元插值
    参数 x: x[n]存放n*m个给定的X方向n个有序坐标。
    参数 y: y[m]存放n*m个给定的Y方向m个有序坐标。
    参数 z: z[n][m]存放n*m个给定结点上的函数值。
    参数 n: n给定结点X坐标个数。
    参数 m: m给定结点Y坐标个数。
    参数 u: u,v指定插值点X坐标与Y坐标。
    参数 v: u,v指定插值点X坐标与Y坐标。
    返回值 函数返回指定插值点(u,v)处的函数近似值。
    */

    public static string drive_slgrg()
    {
        int i, j;
        double u, v, w;
        double[] x = new double[11];
        double[] y = new double[11];
        double[,] z = new double[11, 11];

        // 定义初值
        for (i = 0; i <= 10; i++)
        {
            x[i] = 0.1 * i;
            y[i] = x[i];
        }
        for (i = 0; i <= 10; i++)
        {
            for (j = 0; j <= 10; j++)
            {
                z[i, j] = Math.Exp(-(x[i] - y[j]));
            }
        }

        // 进行插值
        u = 0.35;
        v = 0.65;
        w = gl.slgrg(x, y, z, 11, 11, u, v);
        ; // cout <<"x = " <<u <<",   y = " <<v <<"     z(x,y) = " <<w <<endl;
        u = 0.45;
        v = 0.55;
        w = gl.slgrg(x, y, z, 11, 11, u, v);
        ; // cout <<"x = " <<u <<",   y = " <<v <<"     z(x,y) = " <<w <<endl;
        return "error: 0";
    }
}